package com.example.springboottest.lambda;

import com.example.springboottest.bean.Furn;

public class Test {
    public static void main(String[] args) {
        //匿名内部类
        // XueFunction<Desk, Object> xf = new XueFunction<Desk, Object>()
        //写成上面的代码,扩展性更好,可以强转
        XueFunction<Desk, String> xf = new XueFunction<Desk, String>() {
            @Override
            public String apply(Desk desk){
                return "hello desk";
            }
        };
        String val = xf.apply(new Desk());
        System.out.println("val="+val);
        xf.ok();

        XueFunction<Desk, Object> xf2 = Desk::getName;
        //写成上面的代码,扩展性更好,可以强转
        // XueFunction<Desk, String> xf2 = Desk::getName;
        String val2 = (String)xf2.apply(new Desk());
        System.out.println("val2="+val2);
    }
}

//使用@FunctionalInterface来标识函数式接口
//自定义带泛型函数式接口,携带有且只有一个实现方法
@FunctionalInterface
interface XueFunction<T,R>{
    R apply(T t);//抽象方法:根据类型T的参数,获取类型R的结果
    //函数式接口,依然可以有多个默认实现方法
    default public void ok(){
        System.out.println("ok~");
    }
}

// @FunctionalInterface
// interface XueInterface{
//     public void hi();
// }

class Desk{//Bean
    private String name="hello Xue";
    private String brand="北京牌";
    public String getName(){
        return name;
    }
    public String getbrand(){
        return brand;
    }
}

